package wodegua.d24_file_io;

import java.io.FileWriter;
import java.io.PrintStream;
import java.io.PrintWriter;

/**
 * PrintStream/PrintWriter(打印流)
 * 作用:打印流可以实现更方便、更高效的打印数据出去，能实现打印啥出去就是啥出去。
 *
 * PrintStream提供的打印数据的方案
 * 构造器
 * public PrintStream(outputStream/File/string)     打印流直接通向字节输出流/文件/文件路径
 * public PrintStream(string fileName, charset charset)     可以指定写出去的字符编码
 * public PrintStream(OutputStream out,boolean autoFlush)       可以指定实现自动刷新
 * public PrintStream(OutputStream out, boolean autoFlush, string encoding)     可以指定实现自动刷新，并可指定字符的编码
 * 方法
 * public void println(xxx xx)      打印任意类型的数据出去
 * publie void write(int/byte[]/byte[]-部分)      可以支持写字节数据出去
 *
 *
 * PrintWriter提供的打印数据的方案
 * 构造器
 * public printWriter(outputStream/Writer/File/string)      打印流直接通向字节输出流/文件/文件路径
 * public PrintWriter(string fileName,charset charset)      可以指定写出去的字符编码
 * public PrintWriter(outputStream out/Writer, boolean autoFlush)   可以指定实现自动刷新
 * public PrintWriter(outputStream out,boolean autoFlush, string encoding)      可以指定实现自动刷新，并可指定字符的编码
 * 方法
 * public void println(Xxx xx)  打印任意类型的数据出去
 * public void write(int/string/char[]/..)  可以支持写字符数据出去
 *
 * PrintStream和PrintWriter的区别
 * ●打印数据的功能上是一模一样的:都是使用方便，性能高效(核心优势)
 * ●PrintStream继承自字节输出流OutputStream，因此支持写字节数据的方法。
 * 0PrintWriter继承自字符输出流Writer，因此支持写字符数据出去
 *
 * 打印流的一种应用:输出语句的重定向。
 * System.out.println("老骥伏枥");
 * ·可以把输出语句的打印位置改到某个文件中去。
 * PrintStream ps= new PrintStream("文件地址")
 * System.setout(ps);
 */
public class d21_IoPrintStreamWriter {
    public static void main(String[] args) {
        try (
                PrintStream ps = new PrintStream("javase/print_out.txt");

                PrintWriter pw = new PrintWriter(new FileWriter("javase/print_out.txt",true));
        ) {
            ps.println(97);
            ps.print('a');
            ps.print("中国");
            ps.write(97);

            pw.write("\r\n");
            pw.println(97);
            pw.write(97);

            System.out.println("老骥伏枥");
            System.setOut(ps);
            System.out.println("志在千里");
        } catch (Exception e) {
            e.printStackTrace();
        }

    }
}
